package com.example.study_thread.BaoZi;

public class BaoZiPu {
    //     定义包子数量
    private int count;
    //    定义是否有包子，flag为true表示有包子，为false表示没有包子
    private boolean flag;

    public BaoZiPu() {
    }

    public BaoZiPu(int count, boolean flag) {
        this.count = count;
        this.flag = flag;
    }

    public synchronized void getCount() {
        //                判断flag是否为false，如果为false则无包子，消费线程进行等待
        while (!this.isFlag()) {
            try {
                this.wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

//                如果flag为true，则表示有包子，进行消费
        System.out.println("消费了....第" + count + "个包子");
//                改变flage为true，证明消费结束，该开始生产包子了
        this.setFlag(false);
//                唤醒生产线程，将notify更改为notifyAll，使得所有生产及消费线程都有机会抢锁
        this.notifyAll();
    }

    public synchronized void setCount() {
//        为true表示有包子，生产线程进行等待
        while (this.isFlag()) {
            try {
                this.wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }


//            false表示没有包子，开始进行生产
        count++;
        this.setFlag(true);
//            唤醒消费线程
        this.notifyAll();
        System.out.println("生产了....第" + count + "个包子");
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
}
